package com.yx.fx.generator.controller;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.yx.fx.generator.entity.Coding;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 自动生成代码控制器  通过postman 访问连接 http://localhost:8080/createCode/coding
 */
@RestController
@RequestMapping("/createCode")
public class AutoCreateCodeController {


    public static final String pathCode = "C:\\Users\\29178\\Desktop";


    @RequestMapping("/coding")
    public Object coding(Coding coding){
        System.out.println("------------");
        return code(coding);
    }



    private Coding code(Coding code) {
        try{
            //1. 全局配置
            GlobalConfig config = new GlobalConfig();
            // 是否支持AR模式
            config.setAuthor(code.getAuthor()) // 作者
                    .setOutputDir(pathCode) // 生成路径
                    .setFileOverride(false)  // 文件覆盖
                    .setIdType(IdType.UUID) // 主键策略
                    .setServiceName("%sService")  // 设置生成的service接口的名字的首字母是否为I
                    .setSwagger2(true)
                    .setBaseResultMap(true)//生成基本的resultMap
                    .setBaseColumnList(true);//生成基本的SQL片段


            code.setPath(pathCode);
          //2. 数据源配置
            DataSourceConfig dsConfig = new DataSourceConfig();
            dsConfig.setDbType(DbType.MYSQL)  // 设置数据库类型
                    .setDriverName("com.mysql.cj.jdbc.Driver")
                    .setUrl("jdbc:mysql://localhost:3306/yc-fx?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai")
                    .setUsername("root")
                    .setPassword("123456");

            //3. 策略配置globalConfiguration中
            StrategyConfig stConfig = new StrategyConfig();
            stConfig.setCapitalMode(true) //全局大写命名
//						.setDbColumnUnderline(true)  // 指定表名 字段名是否使用下划线
                    .setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
                    //.setTablePrefix("tbl_")
                    .setInclude(code.getTable());  // 生成的表

            //4. 包名策略配置
            PackageConfig pkConfig = new PackageConfig();

            pkConfig.setParent("com.yc.fx.webApi")  //com.hzty.ts.supplier.webApi
                    .setMapper("mapper")//dao
                    .setService("service")//servcie
                    .setServiceImpl("serviceImpl")//servcie
                    .setController("controller")//controller
                    .setEntity("entity")
                    .setXml("mapperXML");//mapper.xml

            //5. 整合配置
            AutoGenerator ag = new AutoGenerator();
            ag.setGlobalConfig(config)
                    .setDataSource(dsConfig)
                    .setStrategy(stConfig)
                    .setPackageInfo(pkConfig);
            //6. 执行
            ag.execute();
        }catch (Exception e){
            e.printStackTrace();
        }

        return code;
    }

}
